Debugging is the process of finding and fixing errors or “bugs” in software. Generally, developers debug a process or an instance of a computer program. A software tool referred to as a “debugger” is typically used to help software developers debug their software. Remote debugging is the process of debugging software that is running on a different machine than the machine that the developer is using to write, analyze or debug the software. A “remote debugger” tool is used by developers to do remote debugging. Remote debuggers typically have two parts. Monitor software runs on the remote machine and enables the developer's machine to attach to the remote machine and to debug software on the remote machine. Client software runs on the developer's machine and connects to the monitor thereby providing an interface for the developer to debug software on the remote machine.
Recently, it has become common for software development to be performed in a cloud-computing environment. In this context, software that a developer may want to debug is running on servers that the developer does not own or control. Instead, the servers that running the software are often located in a remote datacenter that is owned and/or administered by a third party. Additionally, the developer and third party usually do not know which machines in the cloud environment are actually running the software to be debugged. A management entity in the cloud-computing environment evaluates demand for the software and other factors, such as load-sharing requirements and machine availability, and dynamically selects which machines (and how many machines) should run the software. As a result, it is difficult for the developer to determine which servers in the cloud are running the software. In many cases, the owner or administrator of the servers in the cloud environment limit the developer's access to the servers and software so that only certain processes may be debugged.
Servers and other machines in the cloud-computing environment may be accessed via distributed public and/or private computer networks, such as the Internet or intranets. To connect to machines in the cloud-computing environment, the developer typically needs to use the public Internet for at least part of the connection. Even if the developer could identify which machines are running the software, some servers in the cloud environment may be difficult to access from the public Internet. As a result, it may be difficult to achieve a direct network TCP/IP connection between the developer's machine and the machine running the software to be debugged in the cloud-computing environment.
Errors, bugs, and other faults in the software may not be noticed until the software has been running for long periods of time. Accordingly, machines running the software do not need to be debuggable all the time, but only need to be configured for debugging when the developer wants to or needs to debug the software.